using Markdig;
using Markdig.Extensions.MediaLinks;
using Markdig.SyntaxHighlighting;

namespace MyBlogServer.Services
{
    public interface IMarkdownService
    {
        string ToHtml(string markdown);
    }

    public class MarkdownService : IMarkdownService
    {
        private readonly MarkdownPipeline _pipeline;

        public MarkdownService()
        {
            var mediaOptions = new MediaOptions();
            // 添加对B站的支持
            mediaOptions.Hosts.Add(HostProviderBuilder.Create("bilibili.com", t => { return t.ToString(); }));
            mediaOptions.Hosts.Add(HostProviderBuilder.Create("youtube.com", t => { return t.ToString(); }));

            var builder = new MarkdownPipelineBuilder()
                // 启用标准的Markdown扩展
                .UseAdvancedExtensions()
                // 启用代码语法高亮
                .UseSyntaxHighlighting()
                // 启用媒体链接（包括视频）
                .UseMediaLinks(mediaOptions)
                // 启用自定义容器，支持视频等自定义块
                .UseCustomContainers()
                // 启用Bootstrap类支持
                .UseBootstrap()
                // 启用任务列表
                .UseTaskLists()
                // 启用表格
                .UsePipeTables()
                // 启用脚注
                .UseFooters()
                // 启用数学公式
                .UseMathematics()
                // 启用删除线
                .UseSoftlineBreakAsHardlineBreak()
                // 启用Emphasis扩展
                .UseEmphasisExtras()
                // 启用URL解析
                .UseAutoLinks()
                // 启用YAML前端元数据
                .UseYamlFrontMatter();

            _pipeline = builder.Build();
        }

        public string ToHtml(string markdown)
        {
            if (string.IsNullOrEmpty(markdown))
                return string.Empty;

            return Markdown.ToHtml(markdown, _pipeline);
        }
    }
}